"""
弱引用简单的来说，当它引用的对象存在时，则对象可用，当对象不存在时，就返回None，说明对象不存在。程序不会因为对象不在就报错。
和缓存的性质一样，缓存就是一个有则用，无则重新获取的技术。
"""
import weakref
import sys


class Test:
    pass


# 强引用
a = Test()
# b = a

# 循环引用（这会导致使用`引用计数`方式的垃圾回收机制失效）
# a.attr = b
# b.attr = a

# 弱引用（引用的对象计数器不会加1）
c = weakref.ref(a)
print(c())  # c() 会返回引用的对象
del a
print(c())  # c() 会返回引用的对象
# print(sys.getrefcount(a))
